package cn.tedu.api;

import java.math.BigDecimal;
import java.util.Scanner;

/**本类用于解决浮点数运算不精确的问题*/
//需求：接受用户输入的两个小鼠，做四册运算，并打印计算结果
public class TestBigDecimal {
    public static void main(String[] args) {
//        f1();//使用普通的+ - * /四则运算，暴露浮点数运算不精确的问题
        f2();//使用BigDecimal解决浮点数运算不精确的问题
    }

    private static void f2() {
        //1.提示并接收用户输入的两个小数
        System.out.println("请您输入要计算的第1个数：");
        double a =new Scanner(System.in).nextDouble();
        System.out.println("请您输入要计算的第2个数：");
        double b =new Scanner(System.in).nextDouble();
        //2.创建工具类BigDecimal的对象，把接收到a b分别交给工具类对象保存
        /**1.最好不要使用double作为构造函数的参数类型，不然还会有不精确的现象，有坑！！
         * 2.最好使用重载的，参数类型为String的构造函数*/
        BigDecimal bd1 = new BigDecimal(a+"");
        BigDecimal bd2 = new BigDecimal(b+"");
        //3.通过BigDecimal的对象来调用其方法，实现精确运算
        //3.1定义一个BigDecimal类型的变量来保存结果
        BigDecimal bd3;
        //3.2做加法运算
        bd3 = bd1.add(bd2);
        System.out.println("加法结果："+bd3);
        //3.3做减法运算
        bd3 = bd1.subtract(bd2);
        System.out.println("减法结果："+bd3);
        //3.4做乘法运算
        bd3 = bd1.multiply(bd2);
        System.out.println("乘法结果："+bd3);
        //3.5做除法运算
        /**除法运算，除不尽时会抛出异常：ArithmeticException
         * 所以我们应该使用重载的divide(m,n,o)
         * m是要除以那个对象
         * n是除不尽时保留的位数
         * o是舍入方式，常用的是四舍五入 BigDecimal.ROUND_HALF_UP*/
//        bd3 = bd1.divide(bd2);
        bd3 = bd1.divide(bd2,3,BigDecimal.ROUND_HALF_UP);
        System.out.println("除法结果："+bd3);






    }

    private static void f1() {
        //1.提示并接收用户输入的两个小数
        System.out.println("请您输入要计算的第1个数：");
        double a =new Scanner(System.in).nextDouble();
        System.out.println("请您输入要计算的第2个数：");
        double b =new Scanner(System.in).nextDouble();
        //2.做运算
        System.out.println(a + b);
        System.out.println(a - b);
        System.out.println(a * b);
        System.out.println(a / b);
    }
}
